home *** CD-ROM | disk | FTP | other *** search
/ MASPC 1 / MASPC_1.iso / Demos / Demo DIV / DATA / PRG / TUTOR / TUTOR1B.PRG < prev    next >
Encoding:
Text File  |  1997-12-03  |  4.8 KB  |  121 lines

  1.  
  2. //-------------------------------------------------------------------
  3. // TITULO: Tutorial 1
  4. // AUTOR:  Antonio Marchal
  5. // FECHA:  10/10/97
  6. //-------------------------------------------------------------------
  7.  
  8. PROGRAM Tutorial_1;
  9.  
  10. GLOBAL
  11.     puntuación=0;     // Variable para guardar la puntuación
  12.  
  13. BEGIN
  14.     load_fpg("tutorial\tutor1.fpg");  // Se carga el fichero de gráficos
  15.     load_fnt("tutorial\tutor1.fnt");  // Se carga el tipo de letras
  16.  
  17.     set_mode(m640x480);               // Pone el modo de video 640 x 480
  18.     set_fps(24,0);                    // Número de imágenes por segundo
  19.     put_screen(0,63);                 // Pone la pantalla de fondo
  20.     nave(320,240,41);                 // Crea el proceso nave
  21.  
  22.     write_int(1,320,0,1,OFFSET puntuación); // Muestra la puntuacion
  23.     FROM x=1 TO 4; asteroide(1); END        // Crea 4 asteroides grandes
  24.     FROM x=1 TO 4; asteroide(21); END       // Crea 4 asteroides pequeños
  25. END
  26.  
  27. //-------------------------------------------------------------------
  28. // Maneja la nave protagonista
  29. // Entradas: Coordenadas y código del gráfico
  30. //-------------------------------------------------------------------
  31.  
  32. PROCESS nave(x,y,graph)
  33. BEGIN
  34.     LOOP
  35.         // Comprueba si se pulsan las teclas de izquierda o derecha
  36.         // Y modifica el ángulo si están pulsadas
  37.         IF (key(_left)) angle=angle+10000; END
  38.         IF (key(_right)) angle=angle-10000; END
  39.         // Si se pulsa la tecla de arriba, la nave avanza
  40.         IF (key(_up)) advance(8); END
  41.         // Si se pulsa la tecla control crea un proceso del tipo disparo
  42.         IF (key(_control)) disparo(x,y,angle); END
  43.         // Corrige las coordenadas, para que la nave no desaparezca
  44.         // de pantalla
  45.         corrige_coordenadas();
  46.         FRAME;  // Hace aparecer el gráfico de la nave en pantalla
  47.     END
  48. END
  49.  
  50. //-------------------------------------------------------------------
  51. // Proceso disparo
  52. // Crea los disparos de la nave protagonista
  53. // Entradas: Coordenadas y ángulo del gráfico
  54. //-------------------------------------------------------------------
  55.  
  56. PROCESS disparo(x,y,angle)
  57. BEGIN
  58.     // Hace un avance inicial y define el gráfico a usar
  59.     advance(24); graph=42;
  60.     // Mientras el gráfico este dentro de pantalla
  61.     WHILE (NOT out_region(id,0))
  62.         // Hace que avance en el angulo que tenga predeterminado
  63.         advance(16);
  64.         FRAME;  // Hace que el gráfico aparezca en pantalla
  65.     END
  66. END
  67.  
  68. //-------------------------------------------------------------------
  69. // Proceso asteroide
  70. // Maneja todos los asteroides del juegos tanto grandes como pequeños
  71. // Entradas: Codigo del tipo de asteroide que es su gráfico inicial
  72. //-------------------------------------------------------------------
  73.  
  74. PROCESS asteroide(código)
  75. BEGIN
  76.     LOOP
  77.         // Crea el asteroide en la esquina superior izquierda
  78.         // (Coordenadas: 0,0) y asigna el código de gráfico
  79.         x=0; y=0; graph=código;
  80.         // Elige un angulo al azar
  81.         angle=rand(-180000,180000);
  82.         LOOP
  83.             // Anima el gráfico, sumando uno a su código
  84.             graph=graph+1;
  85.             // Si sobrepasa el limite de la animación, la reinicia
  86.             IF (graph==código+20) graph=código; END
  87.             // Hace avanzar el gráfico en la direccion determinada
  88.             advance(4);
  89.             // Si colisiona con el gráfico del disparo sale
  90.             // del bucle, que de otra manera no tiene final
  91.             IF (collision (TYPE disparo)) BREAK; END
  92.             // Corrige las coordenadas para que no desaparezca de
  93.             // pantalla, haciendole aparecer por el otro lado
  94.             corrige_coordenadas();
  95.             FRAME;      // Hace que el gráfico salga en pantalla
  96.         END
  97.         puntuación=puntuación+5;    // Suma 5 puntos a la puntuación
  98.         // Pone la animación de la explosion mediante un bucle
  99.         FROM graph=43 TO 62; FRAME; END
  100.     END
  101. END
  102.  
  103. //-------------------------------------------------------------------
  104. // Proceso corrige_coordenadas
  105. // Corrige las coordenadas del proceso que los llama haciendo
  106. // que dichas coordenadas sean ciclicas en pantalla
  107. //-------------------------------------------------------------------
  108.  
  109. PROCESS corrige_coordenadas()
  110. BEGIN
  111.     // Si se sale por la izquierda hace que aparezca por la derecha
  112.     // restando para ello el ancho de pantalla
  113.     IF (father.x<-20) father.x=father.x+680; END
  114.     // Si se sale por la derecha hace que aparezca por la izquierda
  115.     IF (father.x>660) father.x=father.x-680; END
  116.     // Si se sale por la arriba hace que aparezca por la abajo
  117.     IF (father.y<-20) father.y=father.y+520; END
  118.     // Si se sale por la abajo hace que aparezca por la arriba
  119.     IF (father.y>500) father.y=father.y-520; END
  120. END
  121.